package atividade;

import java.util.Arrays;

import dominio.ativacao.FuncaoAtivacao;
import dominio.ativacao.especializacao.FuncaoDegrau;
import dominio.ativacao.especializacao.FuncaoGaussiana;
import dominio.ativacao.especializacao.FuncaoLinear;
import dominio.ativacao.especializacao.FuncaoSignada;
import dominio.neuronio.especializacao.NeuronioGenerico;
import dominio.padrao.Padrao;

@SuppressWarnings("unused")
public class Atividade3 {

	public static void main(String[] args) {

		if (args.length < 2) {
			System.err.println(">> parâmetros de entrada incorretos.");
			System.err.println(">> P1 - tipo de função de ativação (1=linear, 2=degrau, 3=signada, 4=gaussiana)");
			System.err.println(">> P2 - vetor de estimulos");
			System.exit(1);
		}

		//
		int cdFuncaoAtivacao = Integer.parseInt(args[0]);

		FuncaoAtivacao funcaoAtivacao = null;
		
		switch (cdFuncaoAtivacao) {
		case 1:
			funcaoAtivacao = new FuncaoLinear();
			break;
		case 2:
			funcaoAtivacao = new FuncaoDegrau();
			break;
		case 3:
			funcaoAtivacao = new FuncaoSignada();
			break;
		case 4:
			funcaoAtivacao = new FuncaoGaussiana();
			break;
		default:
			System.err.println(">> tipo de função de ativação inválida.");
			System.exit(1);
			break;
		}

		//
		String[] strEntradas = Arrays.copyOfRange(args, 1, args.length);
		double[] entradas = new double[strEntradas.length];

		for (int i = 0; i < strEntradas.length; i++) {
			entradas[i] = Double.parseDouble(strEntradas[i]);
		}
		
		//
		NeuronioGenerico neuronio = new NeuronioGenerico(funcaoAtivacao);
		double saida = neuronio.estimular( new Padrao(entradas) );
		System.out.println(neuronio);
	}

}
